/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package desarrollosoft.ghce.vista.implementaciones;

import desarrollosoft.ghce.entidades.AntecedenteHeredoFamiliar;
import desarrollosoft.ghce.entidades.AntecedentePatologico;
import desarrollosoft.ghce.entidades.Consulta;
import desarrollosoft.ghce.entidades.Diagnostico;
import desarrollosoft.ghce.entidades.Intervencion;
import desarrollosoft.ghce.servicio.interfaces.IServicioHistorial;
import desarrollosoft.ghce.vista.interfaces.Avisable;
import desarrollosoft.ghce.vista.interfaces.ObjetoSeteable;
import java.util.List;
import org.zkoss.zk.ui.Execution;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.select.SelectorComposer;
import org.zkoss.zk.ui.select.annotation.Listen;
import org.zkoss.zk.ui.select.annotation.VariableResolver;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zk.ui.select.annotation.WireVariable;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Window;

/**
 *
 * @author ariel
 */
@VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class)
public class ControladoraVentanaBusquedaDiagnostico extends SelectorComposer<Window> {
    
    @WireVariable("servicioHistorial")
    private IServicioHistorial servicioHistorial;
    
    private Consulta consulta;
    private Intervencion intervencion;
    private AntecedentePatologico antecedentePatologico;
    private AntecedenteHeredoFamiliar antecedenteHeredoFamiliar;
    private ObjetoSeteable objetoSeteable;
    
    private Avisable avisable;
    
    @Wire
    private Window ventana;
    
    @Wire
    private Textbox textboxBuscar;
    
    @Wire
    private Listbox listboxDiagnosticos;
    
    @Override
    public void doAfterCompose(Window comp) throws Exception {
        hacerAntesDeDibujar();
        super.doAfterCompose(comp); // wire variables and event listners
        hacerDespuesDeDibujar();
    }
    
    private void hacerAntesDeDibujar() {
        Execution ejecucion = Executions.getCurrent();
        avisable = (Avisable) ejecucion.getArg().get("avisable");
        consulta = (Consulta) ejecucion.getArg().get("consulta");
        intervencion = (Intervencion) ejecucion.getArg().get("intervencion");
        antecedentePatologico = (AntecedentePatologico) ejecucion.getArg().get("antecedentePatologico");
        antecedenteHeredoFamiliar = (AntecedenteHeredoFamiliar) ejecucion.getArg().get("antecedenteHeredoFamiliar");
        objetoSeteable = (ObjetoSeteable) ejecucion.getArg().get("objetoSeteable");
    }
    
    private void hacerDespuesDeDibujar() {
        
    }
    
    @Listen("onClick = #botonBuscar")
    public void clickBotonBuscar() {
        String nombre = textboxBuscar.getValue();
        if (nombre.length() == 0) {
            Messagebox.show("Ingrese un nombre a buscar");
            return;
        }
        List<Diagnostico> listaEncontrados = servicioHistorial.buscarDiagnostico(nombre);
        listboxDiagnosticos.setModel(new ListModelList<>(listaEncontrados));
    }
    
    @Listen("onClick = #botonAceptar")
    public void clickBotonAceptar() {
        Listitem li = listboxDiagnosticos.getSelectedItem();
        
        if (li == null) {
            return;
        }
        
        Diagnostico diagnosticoElegido = li.getValue();
        
        if (consulta != null) {
            consulta.setDiagnostico(diagnosticoElegido);
        } else if (intervencion != null) {
            intervencion.setDiagnostico(diagnosticoElegido);
        } else if (antecedentePatologico != null) {
            antecedentePatologico.setDiagnostico(diagnosticoElegido);
        } else if (antecedenteHeredoFamiliar != null) {
            antecedenteHeredoFamiliar.setDiagnostico(diagnosticoElegido);
        } else if (objetoSeteable != null) {
            objetoSeteable.setearObjeto(diagnosticoElegido);
        } // else if
        
        avisable.seCerroVentanaHija("busquedaDiagnostico");
        ventana.detach();
    }
    
    @Listen("onClick = #botonCancelar")
    public void clickBotonCancelar() {
        avisable.seCerroVentanaHija("busquedaDiagnostico");
        ventana.detach();
    }
}
